package com.fbinggun.fbinggunutil.API;

import com.fbinggun.fbinggunutil.utilclass.Variable;
import me.clip.placeholderapi.PlaceholderAPI;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.inventory.meta.SkullMeta;

import java.util.ArrayList;
import java.util.List;

/**
 * 玩家变量处理常用方法
 */
public class PApiUtil {

    //替换物品中的变量

    /**
     * 将物品中的 玩家变量替换成值
     * @param itemStack 物品
     * @param player 玩家
     * @return
     */
    public static ItemStack setPlaceholder(ItemStack itemStack, Player player){
        ItemMeta itemMeta = itemStack.getItemMeta();
        if(itemMeta!=null){
                if(itemMeta instanceof SkullMeta){
                        SkullMeta skullMeta= (SkullMeta) itemMeta;
                        if(skullMeta.getOwner()!=null){
                            String owner =skullMeta.getOwner();
                            skullMeta.setOwner(PApiUtil.setPlaceholders(player,owner));
                            itemMeta=skullMeta;
                        }

                }

            String name = itemMeta.getDisplayName();
            if(name!=null){
                name=name.replaceAll("&","§");
                name = PlaceholderAPI.setPlaceholders(player,name);
            }
            List<String> lore = itemMeta.getLore();
            if(lore!=null&&lore.size()!=0){
                List<String> lore2 = new ArrayList<>();
                for(String str:lore){
                    str=str.replaceAll("&","§");
                    str = PlaceholderAPI.setPlaceholders(player,str);
                    lore2.add(str);
                }
                itemMeta.setLore(lore2);
            }
            itemStack.setItemMeta(itemMeta);
            return itemStack;
        }else {
            return itemStack;
        }
    }


    /**
     * 将字符串中的 玩家变量替换成值
     * @param str 字符串
     * @param player 玩家
     * @param variables 本地变量
     * @return
     */
    public  static  String setPlaceholders(OfflinePlayer player, String str, Variable... variables){
        str=str.replaceAll("&","§");
        if(variables!=null){
            for(Variable v:variables){
                str=str.replaceAll(v.getKey(), v.getValue());
            }
        }
       return PlaceholderAPI.setPlaceholders(player,str);
    }

    /**
     * 将字符串中的 玩家变量替换成值
     * @param str 字符串
     * @param player 玩家
     * @return
     */
    //替换玩家变量
    public static String setPlaceholders(OfflinePlayer player, String str){
        return setPlaceholders(player,str,null);
    }
    //替换彩色字符

    /**
     * 替换文本的彩色字符
     * @param str 字符串
     * @return
     */
    public  static  String colorReplace(String str){
        return str.replaceAll("&","§");
    }


    //替换彩色字符
    /**
     * 替换文本的彩色字符
     * @param list 字符串
     * @return
     */
    public  static  List<String> colorReplaceList(List<String> list){
        List<String> stringList =new ArrayList<>();
        for(String str:list){
            stringList.add(colorReplace(str));
        }
        return stringList;
    }

    /**
     * 将字符串中的 玩家变量替换成值
     * @param list 字符串
     * @param player 玩家
     * @param variables 本地变量
     * @return
     */
    public static List<String> setPlaceholdersList(Player player, List<String> list, Variable... variables){
        List<String> stringList =new ArrayList<>();
        for(String str:list){
            stringList.add(setPlaceholders(player,str,variables));
        }
        return stringList;
    }
    /**
     * 将字符串中的 玩家变量替换成值
     * @param list 字符串
     * @param player 玩家
     * @return
     */
    public static List<String> setPlaceholdersList(Player player, List<String> list){
        return setPlaceholdersList(player,list,null);
    }

}
